#include <time.h>
#include <unistd.h>
#include <assert.h>
#include "Socket.hpp"
#include "protocol.hpp"

int main()
{
    // Json::Value root;
    // Json::Value part;
    // part["1"] = "haha";
    // part["2"] = "hehe";
    // root["part"] = part;
    // root["x"] = 5;
    // root["y"] = 6;
    // root["op"] = '+';
    // root["desc"] = "this is a + oper:";
    
    // Json::FastWriter w;
    // //Json::StyledWriter w;
    // string str = w.write(root);
    // cout << str << endl;

    // Json::Value root2;
    // Json::Reader r;
    // r.parse(str, root2);
    // int x = root2["x"].asInt();
    // int y = root2["y"].asInt();
    // char op = root2["op"].asInt();
    // string desc = root2["desc"].asString();
    // Json::Value tmp = root2["part"];
    // string tmp_1 = tmp["1"].asString();
    // string tmp_2 = tmp["2"].asString();

    // cout << desc << x << op << y << tmp_1 << tmp_2 << endl;
    srand(time(NULL));

    uint16_t port = 8000;
    string ip = "106.54.46.147";
    struct sockaddr_in server;
    bzero(&server, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr(ip.c_str());
    server.sin_port = htons(port);

    const string opers = "+-*/%=^";

    Sock socket;
    socket.Socket();
    bool r = socket.Connect(ip, port);
    if (!r)
        return 1;

    int cnt = 1;
    while (cnt <= 5)
    {
        int m;
        cin >> m;
//        cout << "=============第" << cnt << "次测试...." << "============" << endl;
//        string package;
//        int x = rand() % 100;
//        int y = rand() % 100 + 1;
//        char op = opers[rand() % opers.size()];
//
//        Request req(x, y, op);
//        req.debugprint();
//
//        req.serialize(&package);
//        package = encode(package);
//        cout << package << endl;
//        write(socket._sockfd, package.c_str(), package.size());
//
//        char buff[1024];
//        int n = read(socket._sockfd, buff, sizeof(buff));
//
//        string inbuff_stream;
//        if (n > 0)
//        {
//            buff[n] = 0;
//            inbuff_stream += buff;
//            cout << inbuff_stream << endl;
//
//            string content;
//            bool r = decode(inbuff_stream, &content);
//            assert(r);
//
//            Response resp;
//            r = resp.deserialize(content);
//            assert(r);
//
//            resp.debugprint();
       // }

        cout << "=======================================" << endl;
        sleep(1);
        cnt++;
    }
}
